 #pragma once

#include <iostream>
#include <string>
#include "util.hpp"

namespace ns_log
{
    using namespace ns_util;
    // 日志等级
    enum
    {
        INFO, // 常规信息 
        DEBUG, // 调试
        WARNING, // 警告, 不影响后续运行
        ERROR, // 错误, 用户不能继续运行了
        FATAL // 整个系统都挂了 
    };

    // 等级 文件 哪一行
    // LOG(level) << "message" -> 返回标准输出流，将信息写入缓冲区中，返回
    inline std::ostream &Log(const std::string &level, const std::string &file_name, int line)
    {
        // 添加日志等级
        std::string message = "[";
        message += level;
        message += "]";

        // 添加报错文件信息
        message += "[";
        message += file_name;
        message += "]";

        // 添加报错位置的行号
        message += "[";
        message += std::to_string(line);
        message += "]";

        // 日志时间戳
        message += "[";
        message += TimeUtil::GetTimeStamp();
        message += "]";
        std::cout << message; // 不同 endl 刷新, 将 message 直接写入缓冲区
        return std::cout; // 返回流
    }
    // LOG(INFO) << "message" << "\n"
    // 开放式日志
    #define LOG(level) Log(#level, __FILE__, __LINE__) 
}